N2O and SVG Друзья. Все вы знаете что последний год я непокладая сил трудился, что бы сделать для Erlang вменяемый веб фреймворк на котором было бы быстро и удобно нам и нашим друзьям гавнокодить и хуйякать в продакшин наши веб конфетки, и что бы при этом нас не нужно было никуда забирать. После неверного пути, когда мы решили вкинуться в сайты на бутстрепе и HTML/CSS лейауты и контролы я сказа себе стоп. Неужеле в расцвете сил в возрасте Иисуса Христа ты хочешь закончить как миллионы нищих нищебродов натаскивая очередной криво сверстаный PSD на свою LESS систему. Ведь наша компания занимается только технологиями будущего, которые через неведомую ткань сингулярности уже доступны сегодня в виде программного обеспечения самой крутой телекомуникационной компании планеты. Мы первые решили использовать исключительно WebSocket бинарный стриминг в своих приложениях, наши сайты уже доступны по SDPY протоколу, мы поддерживаем все механизмы защиты, наш фреймворк поддерживает AES/CBC пиклинг, мы являемся полноценным веб стеком со своим Pub/Sub интерфейсом, интерфейсом для данных представимых в виде двухсвязных списков (фиды), хранящиеся в любой DHT, у нас есть все социальные логины и системы пейментов. Фактически для каждого проекта Sping у нас есть свой аналог: Spring Synrc Description ----------------- ------- ------------------------ Spring Social AVZ Социальные системы Spring Framework N2O Фул стек Веб фрейморк Spring Boot MAD Управление приложениями Spring Data KVS Доступ к данным Spring AMQP MQS Доступ к очередям Но кроме этого у нас есть другие штуки, например если вы разрабатываете JavaScript протоклы мы генерируем JavaScript протокол из Erlang c помощью обычного компалятора Erlang используя нашу JavaScript парс-трансформацию. Благодаря тому, что парс трансформ работает на уровне AST, этот JavaScript поддерживает все Erlang языки: Erlang, Joxa, Elixir. Кроме того у нас есть другие штуки, типа генератор REST из Elrang рекордов, своя системы автоматической пересборки active, которая в отличии от sync, полагается на нативные листенеры файловой системы, что бы не использовать пулинг на продакшине, для всех систем Windows, Mac, Linux. Кароче все у нас хорошо, но проекта, с помощью которого можно было раскрыть всю асинхронную бинарную мощь N2O не было. Поэтому я решил создать нечто уникальное и крутое. Все вы знаете что N2O проект родился из поддержки Турецкого социального игрового проекта. По сути финансирование турецкой социальной сети в размере нескольких сотен тысяч долларов в основном было направлено на Synrc Application Stack и N2O. Так, что можно сказать что кроме растущего числа пользователей, за N2O стоят реальные бизнес интересы. Поэтому мы с турками посидели и решили, что вкидывать деньги в развитие игрушек на Flash не имеет никакого смысла. На данные момент у нас уже был близкий к соверешенству игровой сервер с поддержкой турниров. Кроме того у нас не так много средств, что бы позволить заниматься сразу несколькими платформами iOS, Android, Web. Поэтому я решил попробовать написать HTML5 SVG приложение и посмотреть как оно будет работать на тачевых устройствах. Мы взяли несколько десятков тысяч долларов и поехали в Одессу искать аутсорсеров-профессионалов, которые бы меня поучили JavaScript. Хотя начинали мы довольно вяло, все же под конец сдачи у меня уже был построен процесс SVG, в котором напрочь отсутствовала позиция верстальщика. От дизайнеров до программисто один шаг. Sketch -> Save As -> SVG. Немного патчим SVG, вешаем события по id на элементы SVG DOM и вперед. Я несколько модифицировал для этих целей N2O и N2O в версии 1.5 уже поддерживает разные виды подпротоколов: JSON/BERT/RAWBINARY, последний для аплоада и сервер-пуша картинок или другого окнтекнта по веб сокет каналу. Кроме того я было хотел уже включить поддержку MessagePack, как тут Лоик объявил на стокгольмской Эрланг конференции 2014, что будет наша эрланговская версия MessagePack, которая называется BED, которая поддерживает кодирование строк и еще компактнее чем MessagePack, разрабывается специально для Cowboy и Erlang. Что касается системы логинов, то я решил сделать Instant Play: при заходе нового устройства (браузера) в систему, вы получаете сразу токен и персистентную запись в базе данных вместе с генерированным человеческим именем (которое вы сможете в будущем поменять). Пока в вашем браузере будет сохранен куки-токен вашей учетной записи вы сможете атомаически входить под вашим аккаунтом. При первом же посещении страницы, вы сразу садитесь за игровой стол, где сидят такие же ньюкамеры как и вы, либо роботы, если количество онлайн пользователей не кратно 4. Фирменной фишкой нашей самой крутой в мире имплементацией Rumi(Okey) игры является драг-н-дроп карт (который пока не работает в IE11 из-за отсуствия SVG MSIL аниманий, мы работаем на этим) на тачевых (и других) устройствах. Я хотел дождаться пока мы запусимся на Рамазан, но не могу молчать, потому что вижу, что все опасения по поводу SVG, WebSockets, отзывчивости приложения, тачевости, и кросусстройственности не оправдались. Получилось действительно хорошо, есть чем похвастаться. https://imgprx.livejournal.net/05126c10dd3fa8777ba645066da5c7af28981dfa/wJBWvdzv 88iUS9SsZsd70ZSrxfUTlo4vctf2tVsS0RvzQwLRUbybpjPg0RpeEj185Ty0VHRpzy9T9z5UJAun2A Игра глючи и полностью нерабочая пока в IE11, так что жмите рефреш если че. В проекте использовано только: -- Erlang -- JavaScript -- SVG -- BERT -- WebSockets В нем вы не найдете: -- XHR -- REST -- HTML/CSS -- Flash -- Java И да, мы хайрим. Стейджинг: http://synrc.com:8080/static/app/index.htm Исходники Проекта: https://github.com/synrc/games Ошибки Проекта (ПОЖАЛУЙСТА) записывайте сюда: https://github.com/synrc/games/issues Максим